<?php
namespace Common\Util;
/**
 * Detab数据列表类
 * @author dece 
 * @time 2018.1.6 13.48
 */
class Detab {

	/**
	 * 参数配置
	 * 
	 */
	public $config = array(
				'p'			=> 1,//当前页码
				'pageNum'	=> 10,//每页条数
				'tablename' => '',//表名
				'field' 	=> '*',//field字段
				'where' 	=> '',//where条件
				'condition' => '',//条件
				'join' 		=> '',//关联条件
				'order' 	=> 'id DESC',//排序
			);
	/**
	 * 数据列表方法 de_table_list
	 * @param conf 配置 tablename 表名 where 条件 condition 条件 p 页码 pageNum 条数 field 字段 order 排序
	 * @return row
	 * 
	 */
	public function de_table_list( $conf = array() ){
		// 导入配置
		$this->config = array_merge($this->config, $conf);
		// 判断where条件
		$where = empty($this->config['where']) ? '1=1' : $this->config['where'] ;
		// 命名空数组
		$row = array();
		// 实例化表名
		$table = D($this->config['tablename']);
		// 查询数据条数
		$count = $table->where($where)->count();
		// 设置分页
		$Page = new \Think\Pagede( $count , $this->config['pageNum'] );
		// 数据条数
		$row['count'] = $count;
		// 数据分页 (默认使用Page show方法，使用freeshow方法需要使用Pagede类)
		$row['page'] = $Page->freeshow();
		// 分页数据样式
		$row['page'] = $this->pageStr($row['page']);
		// 列表数据
		$row['list'] = $table->field($this->config['field'])
				->where($where)
				->order($this->config['order'])
				->page($this->config['p'].','.$this->config['pageNum'])
				->select();
		// 返回结果
		return $row;
	}

	/**
	 * 数据列表方法 join_table_list
	 * @param conf 配置 tablename 表名 field 字段 join 关联条件 where 条件 condition 条件 p 页码 pageNum 条数 order 排序
	 * @return row
	 * 
	 */
	public function join_table_list( $conf = array() ){
		// 导入配置
		$this->config = array_merge($this->config, $conf);
		// 判断where条件
		$where = empty($this->config['where']) ? '1=1' : $this->config['where'] ;
		// 命名空数组
		$row = array();
		// 实例化表名
		$table = D($this->config['tablename']);
		// 查询数据条数
		$count = $table->join($this->config['join'])->where($where)->count();
		// 设置分页
		$Page = new \Think\Pagede( $count , $this->config['pageNum'] );
		// 数据条数
		$row['count'] = $count;
		// 数据分页 (默认使用Page show方法，使用freeshow方法需要使用Pagede类)
		$row['page'] = $Page->freeshow();
		// 分页数据样式
		$row['page'] = $this->pageStr($row['page']);
		// 列表数据
		$row['list'] = $table->field($this->config['field'])
				->join($this->config['join'])
				->where($where)
				->order($this->config['order'])
				->page($this->config['p'].','.$this->config['pageNum'])
				->select();
		// 返回结果
		return $row;
	}

	/**
	 * 数据分页方法 de_page
	 * @param count 数据总条数 pageNum 分页条数
	 * @return row
	 * 
	 */
	public function de_page( $count = 0 , $pageNum = 10 ){
		// 命名空数组
		$row = array();
		// 设置分页
		$Page = new \Think\Pagede( $count , $pageNum );
		// 数据条数
		$row['count'] = $count;
		// 数据分页 (默认使用Page show方法，使用freeshow方法需要使用Pagede类)
		$free_data = $Page->freeshow();
		// 分页数据样式
		$row['page'] = $this->pageStr($free_data);
		// 返回结果
		return $row;
	}

	/**
	 * 分页样式
	 * @param 分页数据
	 * @return str
	 * 
	 */
	public function pageStr( $page ){
		// 判断分页数据有没有
		if( empty($page) ){
			return '';
		}
		// 开始
		$str = '<ul class="pagination">';
		// 第一页
		$str .= $page['first']['url'] == 'javascript:;'? '<li class="disabled">' : '<li>' ;
		$str .= '<a href="'.$page['first']['url'].'"><i class="icon-double-angle-left"></i><<</a></li>';
		// 上一页
		$str .= $page['prev']['url'] == 'javascript:;'? '<li class="disabled">' : '<li>' ;
		$str .= '<a href="'.$page['prev']['url'].'"><i class="icon-double-angle-left"></i>上一页</a></li>';
		// 遍历中间页
		foreach ($page['page'] as $pk => $pv) {
			if($pv['check']){
				$str .= '<li class="active disabled">';
			}else{
				$str .= '<li>';
			}
			$str .= '<a href="'.$pv['url'].'">'.$pv['name'].'</a></li>';
		}
		// 下一页
		$str .= $page['next']['url'] == 'javascript:;'? '<li class="disabled">' : '<li>' ;
		$str .= '<a href="'.$page['next']['url'].'"><i class="icon-double-angle-right"></i>下一页</a></li>';
		// 最后一页
		$str .= $page['end']['url'] == 'javascript:;'? '<li class="disabled">' : '<li>' ;
		$str .= '<a href="'.$page['end']['url'].'"><i class="icon-double-angle-right"></i>>></a></li>';
		// 结束
		$str .= '</ul>';
        return $str;
	}
}
